package interfaces;

public interface IStatusManager {

	/**
	 * Mensagem enviada por um trabalhador para seu gerente, para informar seu
	 * estado.
	 * 
	 * @param workerId
	 * @param capacity
	 * @param workload
	 * @param updateDate
	 */
	void nodeStatus(String workerId, float capacity, int workload, long updateDate);
	
	
	/**
	 * Analisa a possibilidade de enviar mais trabalho para o trabalhador
	 * 
	 * @param capacity
	 * @param workload
	 * @param curretnUpdateDate
	 * @param lastUpdateDate
	 */
	void analyzePossibilityToSendWork(float capacity, int workload, long curretnUpdateDate, long lastUpdateDate);
	
	/**
	 * Define uma Identificacao para o node
	 * @param id
	 */
	void setID(String id);

	/**
	 * Obtem a identificacao do node
	 * @return
	 */
	String getID();

	/**
	 * Define a capacidade do node
	 * @param capacity
	 */
	void setCapacity(float capacity);

	/**
	 * Obtem a capacidade do node
	 * @return
	 */
	float getCapacity();

	/**
	 * Define a quantidade de trabalho do node
	 * @param workload
	 */
	void setWorkload(int workload);

	/**
	 * Obtem a quantidade de trabalho do node
	 * @return
	 */
	int getWorkload();
	
	/**
	 * Define a quantidade de trabalho que deve ser enviada para um node
	 * @param requestSize
	 */
    void setRequestSize(int requestSize);

    /**
     * Obtem a quantidade de trabalho a ser enviada para um node
     * @return
     */
    int getRequestSize();
    
    /**
	 * Define o procurador deste gerente
	 * @return
	 */
	IManagerProxy getManagerProxy();
	
	/**
	 * Retorna o procurador deste gerente
	 * @param managerProxy
	 */
	void setManagerProxy(IManagerProxy managerProxy);
	
	/**
	 * Define o gerente de tarefa
	 */
	IJobManager getJobManager();
	
	/**
	 * Retorna o gerente de resposta
	 * @param jobManager
	 */
	void setJobManager(IJobManager jobManager);
	
	/**
	 * Retorna o gerente de estato
	 * @return
	 */
	IAnswerManager getAnswerManager();
	
	/**
	 * Define o gerente de resposta
	 * @param statusManager
	 */
	void setAnswerMManager(IAnswerManager answerManager);
	
	void statusUpdate();
	
	void reduceManagerWorkload(int workload);
	
	void increaseManagerWorkload(int workload);
}
